package com.modxiageasyh.mixinglibrary.fragment

import android.content.Context
import android.graphics.BitmapFactory
import android.graphics.PointF
import android.net.Uri
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.core.content.ContextCompat
import com.bumptech.glide.request.target.SimpleTarget
import com.bumptech.glide.request.transition.Transition
import com.davemorrissey.labs.subscaleview.ImageSource
import com.davemorrissey.labs.subscaleview.ImageViewState
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import com.modxiageasyh.mixinglibrary.R
import com.owbtgad.common.utils.glide.MyImageLoader
import kotlinx.android.synthetic.main.fragment_subsampling_scale_image_view.*
import java.io.File

// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"

/**
 * A simple [Fragment] subclass.
 * Use the [SubsamplingScaleImageViewFragment.newInstance] factory method to
 * create an instance of this fragment.
 */
class SubsamplingScaleImageViewFragment : Fragment() {
    // TODO: Rename and change types of parameters
    private var param1: String? = null
    private var param2: String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {
            param1 = it.getString(ARG_PARAM1)
            param2 = it.getString(ARG_PARAM2)
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_subsampling_scale_image_view, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val stringPath = "https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8a070133e6944eeea8dce745f33b6c08~tplv-k3u1fbpfcp-zoom-1.image"
        context?.let { loadLargeImage(it,stringPath,subsamplingScaleImageView) }
    }

    fun loadLargeImage(context: Context, res: String, imageView: SubsamplingScaleImageView) {
        imageView.isQuickScaleEnabled = true
        imageView.maxScale = 15F
        imageView.isZoomEnabled = true
        imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CUSTOM)

        MyImageLoader.getBuilder().load(res).setBaseTarget(object :SimpleTarget<File?>(){

            override fun onResourceReady(resource: File, transition: Transition<in File?>?) {
                val sWidth = BitmapFactory.decodeFile(resource.absolutePath).width
                val sHeight = BitmapFactory.decodeFile(resource.absolutePath).height
                val wm = ContextCompat.getSystemService(context, WindowManager::class.java)
//                val width = wm?.defaultDisplay?.width ?: 0
                val height = wm?.defaultDisplay?.height ?: 0
                if (sHeight >= height
                    && sHeight / sWidth >= 3) {
                    imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP)
                    imageView.setImage(ImageSource.uri(Uri.fromFile(resource)), ImageViewState(0.5f, PointF(0f, 0f), 0))
                } else {
                    imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CUSTOM)
                    imageView.setImage(ImageSource.uri(Uri.fromFile(resource)))
                    imageView.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER_IMMEDIATE)
                }
            }
        }).show()

    }


    companion object {
        /**
         * Use this factory method to create a new instance of
         * this fragment using the provided parameters.
         *
         * @param param1 Parameter 1.
         * @param param2 Parameter 2.
         * @return A new instance of fragment SubsamplingScaleImageViewFragment.
         */
        // TODO: Rename and change types and number of parameters
        @JvmStatic
        fun newInstance(param1: String, param2: String) =
            SubsamplingScaleImageViewFragment().apply {
                arguments = Bundle().apply {
                    putString(ARG_PARAM1, param1)
                    putString(ARG_PARAM2, param2)
                }
            }
    }
}